﻿// 9. if语句及嵌套

/*
语法：
if (表达式)
{
    // 表达式为真时执行的语句。
}
else
{
    // 表达式为假时执行的语句。
}
*/

//注意：
/*
 if (表达式)之间的空格可以不写。

 表达式必须使用括号。

 表达式可以是具体的值。

 表达式一般是关系运算和逻辑运算表达式，也可以是赋值运算或其它的表达式。

 不要把 if（变量名 == 值）写成 if（变量名 = 值）。

 整个 if 语句可以没有 else 分支。

 if 或 else 分支花括号内的代码如果只有一行，花括号可以不写；如果一行也没有，花括号一定要写；
   如果有多行，花括号一定要写，如果不写，除了第一行，其它的代码将不是 if 语句的一部分。

 if (表达式)和 else 后不能加分号，因为分号表示空语句。（C++用分号作为一条语句结束的标志。
   如果在 C++程序中不小心多写了一个分号，那么该分号会被当成一条空语句。）
*/


  // 判断超女的颜值，如果漂亮，在控制台输出“晋级下一轮”，否则输出“冲关失败”。
  // 1）声明一个 bool 型变量，用于存放超女的颜值数据
  // 2）显示输入超女颜值的提示信息。
  // 3）输入超女的颜值数据，存放在变量中。
  // 4）用 if 语句判断超女的颜值，如果漂亮，显示“晋级下一轮”，否则显示“冲关失败”。

/*
#include <iostream>
using namespace std;                                        // 指定缺省的命名空间。
int main()
{
    // C++用分号作为一条语句结束的标志。
    // 如果在 C++程序中不小心多写了一个分号，那么该分号也许会被视作一个空语句。
    int a = 6;;                                            //后面的分号表示一个空语句
    bool yz = true;                                        //声明一个 bool 型变量，用于存放超女的颜值数据
    cout << "请输入超女的颜值：" << endl;                  //显示输入超女颜值的提示信息。                 
    cin >> yz;                                             //输入超女的颜值数据，存放在变量中
    if (yz == true)
        cout << "晋级下一轮" << endl;
    else
        cout << "冲关失败" << endl;
}
*/



//嵌套使用 if 语句

//if 语句可以嵌套使用，实现多级（层）的条件判断（最多 127 层）。

/*
语法：
if (表达式一)
{
    if (表达式二)
{
    // 表达式二为真时执行的语句。
}
    else
{
    // 表达式二为假时执行的语句。
}
}
else
{
    // 表达式一为假时执行的语句。
}
*/


// 超女选秀：1）性别（X-女，Y-男）；2）颜值（1-漂亮，0-不漂亮）；3）身材（1-火辣，2 - 丰满，3 - 苗条）。
// 声明三个变量，存放超女的性别、颜值和身材数据

/*
#include<iostream>
using namespace std;
int main()
{
    char sex;                                     //性别，（X-女，Y-男）
    bool yz;                                      //颜值，（1-漂亮，0-不漂亮）
    int stature;                                  //身材，（1-火辣，2 - 丰满，3 - 苗条）
    cout << "请输入超女的性别：";
    cin >> sex;                                   // 输入超女的性别，存放在变量sex中。
    // 判断超女的性别，如果是女，流程继续，否则程序结束。
    if (sex == 'X')
    {
        cout << "请输入超女的颜值：";
        cin >> yz;
        if (yz == 1)
        {
            cout << "请输入超女的身材：";
            cin >> stature;
            if (stature == 1)
            {
                cout << "晋级成功" << endl;
            }
        }
    }
}
*/

// 嵌套 if 语句的坑
// 嵌套使用 if 语句时候，会出现 if 与 else 的配对问题。
// C++编译器处理该问题的原则是：else 总是与前面最近 if 配对。
// 如果要改变这种配对关系，可以使用花括号来确定新的配对关系。

/*
//如果要改变这种配对关系，可以使用花括号来确定新的配对关系。
if (sex == 'X')
if (yz == true)
cout << "sex==X,yz==true\n";
else
cout << "sex==Y,yz==true or false\n";
//以上代码中的 else 与第二个 if 配对，
*/

// 如果想让它与第一个 if 配对，代码如下：
/*
if (sex == 'X')
{
    if (yz == true)
        cout << "sex==X,yz==true\n";
}
else
cout << "sex==Y,yz==true or false\n";
*/



//多条件的 if 语句

/*
语法：
if (表达式一)
{
    // 表达式一为真时执行的语句。
}
else if (表达式二)
{
    // 表达式二为真时执行的语句。
}
else if (表达式三)
{
    // 表达式三为真时执行的语句。
}……
else if (表达式 n)
{
    // 表达式 n 为真时执行的语句。
}
else
{
    // 全部表达式都不为真时执行的语句。
}

*/

//注意：
// 多条件的 if 语句本质上是嵌套的 if 语句。
// 最多只能有 127 个条件分支。
// 最后一个 else 可以没有。


//超女的身材：1-火辣；2-丰满；3-苗条；4-强壮；5-肥胖；>5-未知

/*
#include<iostream>
using namespace std;
int main()
{
    int stature;                                 //声明存放超女身材数据的变量。
    cout << "请输入超女的信息代号: ";            //（1-火辣；2-丰满；3-苗条；4-强壮；5-肥胖；其它表示未知）
    cin >> stature;
    // 用多条件的 if 语句，判断身材代码，显示身材的中文描述。
    if (stature == 1)
        cout << "身材火辣！\n";
    else if (stature == 2)
        cout << "身材火辣，丰满！\n";
    else if (stature == 3)
        cout << "妹妹身材真太棒了，苗条，细肢结硕果，身材火辣又丰满！\n";
    else if (stature == 4)
        cout << "我的天！妹妹妹妹不仅婀娜多姿，看起来就还很强壮的样子！\n";
    else if (stature == 5)
        cout << "肥胖！！！\n";
    else
        cout << "未知生物哈哈哈！！！\n";
}
*/


//if 语句中的逻辑表达式

//采用括号、对齐、空格、换行有助于更清晰的表达复杂的逻辑表达式。

// 超女的数据：姓名、年龄（16-50 岁），身高（150cm-190cm），身材（火辣；丰满；苗条）
// 颜值（漂亮；一般；歪瓜裂枣）。
// 晋级的标准：年龄 18-30 岁，身高 165cm-175cm，体重小于60Kg,身材火辣，颜值漂亮或者一般。

/*
#include<iostream>
using namespace std;
int main()
{
    // 已准备好的超女数据。
    string name = "西施";
    int age = 19;
    double height = 168.6;
    double weight = 53.4;
    string yz = "漂亮";
    string stature = "火辣";
    if ((age > 18 && age < 30) && (height > 165 && height < 175) && (yz == "漂亮") && (stature == "火辣")&&(weight<60))
    {
        cout << "晋级成功！\n";
    }
}
*/



//三目运算也叫条件运算或三元运算，可以实现简单 if 语句的功能，但是书写更简洁。

//语法： 表达式一 ? 表达式二 : 表达式三

//先计算表达式一的值，如果为真，整个表达式的结果为表达式二的值，如果为假，整个表达式的结果为表达式三的值。


#include<iostream>
using namespace std;
int main()
{
    int a, b, c;
    a = 7;
    b = 6;
    c = (a > b) ? a : b;
    cout << "c = " << c << endl;
    //上述三目运算等同于
    int x, y, z;
    x = 7;
    y = 6;
    if (x >y) z = x;
    else z = y;
    cout << "z = " << z << endl;
}
//三目运算表达式可以嵌套使用，但是，过于复杂的三目运算表达式不方便理解。

